package com.bookshop.aspect;

import com.bookshop.aspect.exception.CustomException;
import com.bookshop.entity.response.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @author g2l
 * @create 2023-12-25 19:38
 */
@Slf4j
@RestControllerAdvice
public class ExceptionHandlerAdvice {
    // 全局异常处理
    // 应用到所有@RequestMapping注解的方法(包括拦截器)，在其抛出Exception异常时执行
    // 定义全局异常处理，value属性可以过滤拦截指定异常，此处拦截所有的Exception
    @ExceptionHandler(Exception.class)
    public R handleException(Exception e) {
        // 把异常的详细信息打印到日志中
        log.error(e.getMessage(), e);

        // 关于拦截器的异常拦截较为复杂，具体可以参照mvc源码
        return R.error().put("error", e.getMessage());
    }
    // 自定义异常处理，添加了http状态码
    @ExceptionHandler(CustomException.class)
    public R handleCustomException(CustomException e) {
        // 把异常的详细信息打印到日志中
        log.error(e.getMessage(), e);

        return R.error().put("code", e.getCode()).put("error", e.getMessage());
    }
}
